import { createStore } from 'vuex'
import { getInfo,login } from '~/api/manager'
import { setToken,removeToken } from '~/composables/auth'


// 创建一个新的 store 实例
const store = createStore({
  state () {
    return {
      // 用户信息
      user: {},
      // 侧边宽度
      asideWidth: '250px',
      // 标志位(是否已经请求过getInfo信息)
      hasGetInfo: false,
      // 记录菜单信息
      menus: [],
      // 记录权限角色信息
      ruleNames: []
    }
  },
  mutations: {
    // 赋值用户信息的方法
    SET_USERINFO(state, user){
        state.user = user
    },
    // 修改标志位(登录了置为true,登出了重新置为false)
    SET_HASGETINFO(state){
        state.hasGetInfo = ! state.hasGetInfo
    },
    // 赋值菜单信息的方法
    SET_MENUS(state, menus){
        state.menus = menus
    },
    // 赋值权限角色信息
    SET_RULENAMES(state, ruleNames){
        state.ruleNames = ruleNames
    },
    // 侧边宽带折叠或者展开方法
    handleAsideWidth(state){
        state.asideWidth = state.asideWidth === '250px' ? '64px' : '250px'
    }
  },
  actions: {
    // 登录
    login( { commit }, { username,password } ){
      return new Promise((resolve, reject) => { 
        login(username,password).then(res => {
            setToken(res.data.token)
            resolve(res)
        }).catch(err => {
          reject(err)
        })
      })
    },

    // 获取用户菜单角色权限信息
    getInfo( { commit } ){
      return new Promise((resolve, reject) => { 
          getInfo().then(res => {
            // console.log(res)
            // 调用store方法赋值
            commit('SET_USERINFO',res)
            commit('SET_MENUS',res.data.menus)
            commit('SET_RULENAMES',res.data.ruleNames)
            resolve(res)
          }).catch(err => {
            reject(err)
          })
      })
    },

    // 退出登录
    logout( { commit } ){
      // 清除cookies
      removeToken()
      // 清楚用户信息
      commit('SET_USERINFO',{})
    }
  }
})


export default store
